﻿package scrn;


import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;

import media.Pic;
import core.Man;
import core.Mess;
import core.Setting;


// ============================================ Отрисовка анимированных рисунков
public final class PicAni {

// =================================================================== Константы
public static final int MAX_ANIMATED = 10; // максимальное кол-во анимированных смайлов


// ================================================================== Переменные
private Pic[] pics = new Pic[Setting.MAX_ANI]; // Набор анимируемых рисунков
private int posX[] = new int[Setting.MAX_ANI]; // Позиции рисунков
private int posY[] = new int[Setting.MAX_ANI];
private boolean fSel[] = new boolean[Setting.MAX_ANI]; // Флаг "Смайл селектирован"

private int picClipX; // Поле отрисовки смайлов
private int picClipY;
private int picClipW;
private int picClipH;

private int picP; // Указатель на следующий свободный слот
private int picTot; // Количество анимируемых смайлов

private Color colSel = new Color(0xffffff); // Цвет селектора

private int frame = 0; // Текущий кадр

private Image bg; // Картинка фона


// =============================================================== Инициализация

public PicAni() {

	Mess.m("SmlMan.init", "=====");
}


// ============================================= Добавить анимированную картинку
public void addPic(Pic pic, int posX, int posY, boolean fSel) {

	this.pics[picP] = pic;
	this.posX[picP] = posX;
	this.posY[picP] = posY; // Запоминаем левый верхний угол
	this.fSel[picP] = fSel;

	if (++picP >= Setting.MAX_ANI) {
		picP = 0;
	}
	if (++picTot >= Setting.MAX_ANI) {
		picTot = Setting.MAX_ANI;
	}

}


//============================================================== Очистка списка
public void reset(Color colSel, int picClipX, int picClipY, int picClipW,
		int picClipH, BufferedImage bg) {

	this.picTot = 0;
	this.picP = 0;

	this.colSel = colSel;

	this.picClipX = picClipX;
	this.picClipY = picClipY;
	this.picClipW = picClipW;
	this.picClipH = picClipH;

	this.bg = bg;
}


// =========================================================== Отрисовать смайлы
public boolean drawAll() {

	boolean fFlush;

	if (picTot > 0) {
		synchronized (Man.main) { // TODO убрать синхронизацию!
			Draw.g.setClip(picClipX, picClipY, picClipW, picClipH);

			int q;
			Pic pic;

			++frame;
			for (q = 0; q < picTot; ++q) {
				pic = pics[q];
				pic.nextFrame(frame);

				if (fSel[q]) {
					Draw.g.setColor(colSel);
					Draw.g.fillRect(posX[q], posY[q], pic.w, pic.h);
				} else { // TODO Очевидно, придется всегда отрисовывать фон
					Draw.g
							.drawImage(bg, posX[q], posY[q], posX[q] + pic.w,
									posY[q] + pic.h, posX[q], posY[q], posX[q] + pic.w, posY[q]
											+ pic.h, null);
				}
				pic.draw(Draw.g, posX[q], posY[q]);
			}

		}

		fFlush = true;
	} else {
		fFlush = false;
	}

	return fFlush;

}
}
